#include <stdio.h>

void main(void)
{
    // 定义结构体
    struct car
    {
        char *name;
        float price;
        int speed;
    };
    // 定义结构体实例
    struct car c1;
    c1.name = "11";
    c1.price = 2.0;
    c1.speed = 200;
    // 两种赋值方式
    // 大括号里面的值的顺序，必须与 struct 类型声明时属性的顺序一致。否则，必须为每个值指定属性名
    struct car saturn = {"Saturn SL/2", 16000.99, 175};
    struct car saturn1 = {.speed = 172, .name = "Saturn SL/2"};

    // typedef命令可以为 struct 结构指定一个别名，这样使用起来更简洁
    typedef struct cell_phone
    {
        int cell_no;
        float minutes_of_charge;
    } phone;
    phone p = {5551234, 5};
    printf("%d,%f\n", p.cell_no, p.minutes_of_charge);
    
    // 指向结构体的指针
    struct cell_phone *qq = &p;
    printf("%d,%f\n", (*qq).cell_no, (*qq).minutes_of_charge);
    // 类型别名简写
    phone *q = &p;
    printf("%d,%f\n", (*q).cell_no, (*q).minutes_of_charge);


    // struct 结构也可以作为数组成员。
    // 上面示例声明了一个有1个成员的数组arr，每个成员都是自定义类型cell_phone的实例。
    struct cell_phone arr[] = {p};
    printf("%d,%f\n", arr[0].cell_no, arr[0].minutes_of_charge);
}